﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;
using CajaChica.Clases;
using CajaChica.Entidades;
namespace CajaChica.Formularios
{
    public partial class frmOperacionesRequerimientoCaja : CajaChica.Formularios.frmMaestro
    {
        clsRequerimientoCabecera objCabecera;
        clsRequerimientoDetalle objDetalle;
        cajaEntities objCajaEntidades;
        clsPersona objPersona;
        clsCentroCosto objCentroCosto;
        clsUnidadMedida objUnidadMedida;
        clsArchivoConfiguracion config;
        public frmOperacionesRequerimientoCaja()
        {
            InitializeComponent();
        }

        private void frmOperacionesRequerimientoCaja_Load(object sender, EventArgs e)
        {
            objPersona = new clsPersona();
            objCentroCosto = new clsCentroCosto();
            objUnidadMedida = new clsUnidadMedida();
            objCabecera = new clsRequerimientoCabecera();
            this.AsignarPropiedadesDataGridView();
            cboResponsableAprobacion.DisplayMember = "RAZON_SOCIAL";
            cboResponsableAprobacion.ValueMember = "CODIGO";
            cboResponsableAprobacion.DataSource = objPersona.CargarDatosEmpleadosComboBox();
            cboResponsableRequerimiento.DisplayMember = "RAZON_SOCIAL";
            cboResponsableRequerimiento.ValueMember = "CODIGO";
            cboResponsableRequerimiento.DataSource = objPersona.CargarDatosEmpleadosComboBox();
            cboCentroCosto.DisplayMember = "DESCRIPCION";
            cboCentroCosto.ValueMember = "CODIGO";
            cboCentroCosto.DataSource = objCentroCosto.CargarDatosComboBox();
            cboUnidadMedida.DisplayMember = "DESCRIPCION";
            cboUnidadMedida.ValueMember = "CODIGO";
            cboUnidadMedida.DataSource = objUnidadMedida.CargarComboBox();
            cboMoneda.Items.Add("SOLES");
            cboMoneda.Items.Add("DOLARES");
            this.SelectMaxNumero();
            txtDescripcion.CharacterCasing = CharacterCasing.Upper;
            txtMotivo.CharacterCasing = CharacterCasing.Upper;
            grdListado.DataSource = objCabecera.CargarDatosDataGridView();
        }

        private void AsignarPropiedadesDataGridView()
        {
            grdDetalle.AutoGenerateColumns = false;
            grdDetalle.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            grdDetalle.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grdDetalle.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grdDetalle.Columns[7].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grdDetalle.Columns[8].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            grdDetalle.Columns[5].DefaultCellStyle.Format = "###,###,##0.00";
            grdDetalle.Columns[6].DefaultCellStyle.Format = "###,###,##0.00";
            grdDetalle.Columns[7].DefaultCellStyle.Format = "###,###,##0.00";

        }

        private void sbpNuevo_Click(object sender, EventArgs e)
        {
            sbMantenimiento.ExpandedPanel = sbpVer;
            stcMaestro.SelectedTab = stiRegistro;
            txtFechaSolicitud.Select();
        }

        private void txtResponsableAprobacion_KeyPress(object sender, KeyPressEventArgs e)
        {
            objCajaEntidades = new cajaEntities();
            if (string.Empty != txtResponsableAprobacion.Text.Trim())
            {
                try
                {
                    personas persona = objCajaEntidades.personas.FirstOrDefault(
                        p => p.rut == txtResponsableRequerimiento.Text.Trim());
                    cboResponsableAprobacion.Text = persona.rs;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("EL CODIGO INGRESADO NO EXISTE\nINTENTE DE NUEVO",
                        "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void txtResponsableRequerimiento_KeyPress(object sender, KeyPressEventArgs e)
        {
            objCajaEntidades = new cajaEntities();
            if (string.Empty != txtResponsableRequerimiento.Text.Trim())
            {
                try
                {
                    personas persona = objCajaEntidades.personas.FirstOrDefault(
                        p => p.rut == txtResponsableRequerimiento.Text.Trim());
                    cboResponsableRequerimiento.Text = persona.rs;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("EL CODIGO INGRESADO NO EXISTE\nINTENTE DE NUEVO",
                        "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void cboResponsableRequerimiento_SelectedIndexChanged(object sender, EventArgs e)
        {
            objCajaEntidades = new cajaEntities();
            int codigo = int.Parse(cboResponsableRequerimiento.SelectedValue.ToString());
            try
            {
                personas persona = objCajaEntidades.personas.FirstOrDefault(
                    p => p.id == codigo);
                txtResponsableRequerimiento.Text = persona.rut;
            }
            catch (Exception ex)
            {
                MessageBox.Show("EL CODIGO INGRESADO NO EXISTE\nINTENTE DE NUEVO",
                    "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cboResponsableAprobacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            objCajaEntidades = new cajaEntities();
            int codigo = int.Parse(cboResponsableAprobacion.SelectedValue.ToString());
            try
            {
                personas persona = objCajaEntidades.personas.FirstOrDefault(
                    p => p.id == codigo);
                txtResponsableAprobacion.Text = persona.rut;
            }
            catch (Exception ex)
            {
                MessageBox.Show("EL CODIGO INGRESADO NO EXISTE\nINTENTE DE NUEVO",
                    "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void SelectMaxNumero()
        {
            objCajaEntidades = new cajaEntities();
            var queryNumeroRequerimiento = (from rc in objCajaEntidades.requerimiento_cabecera select rc.numero).Max();
            var queryIdRequerimiento = (from rc in objCajaEntidades.requerimiento_cabecera select rc.id).Max();
            var querySerieRequerimiento = (from rc in objCajaEntidades.requerimiento_cabecera select rc.serie).Max();
            lblCodigoRequerimiento.Text = (queryIdRequerimiento + 1).ToString();
            txtNumero.Text = (queryNumeroRequerimiento + 1).ToString();
            txtSerie.Text = querySerieRequerimiento.ToString();
        }

        private void btnNuevoGuardar_Click(object sender, EventArgs e)
        {
            objCabecera = new clsRequerimientoCabecera();
            objDetalle = new clsRequerimientoDetalle();
            config = new clsArchivoConfiguracion();
            string moneda = cboMoneda.Text;
            try
            {
                objCabecera.Guardar(
                    DateTime.Parse(txtFechaSolicitud.Text),
                    DateTime.Parse(txtFechaAprobacion.Text),
                    int.Parse(cboResponsableRequerimiento.SelectedValue.ToString()),
                    int.Parse(cboResponsableAprobacion.SelectedValue.ToString()),
                    chkAprobado.Checked,
                    moneda.Substring(0, 1),
                    txtMotivo.Text,
                    decimal.Parse(txtTotalRequerimiento.Text),
                    int.Parse(txtSerie.Text),
                    int.Parse(txtNumero.Text),
                    int.Parse(config.LeerCodigoUsuario().ToString()));

                foreach (DataGridViewRow fila in grdDetalle.Rows)
                {
                    bool activado;
                    if (Convert.ToBoolean(fila.Cells[8].Value))
                    {
                        activado = true;
                    }
                    else
                    {
                        activado = false;
                    }

                    objDetalle.Guardar(
                        int.Parse(fila.Cells[0].Value.ToString()), //codigo centro de costo
                        fila.Cells[2].Value.ToString(), //descripcion
                        int.Parse(fila.Cells[3].Value.ToString()), //unidad de medida
                        decimal.Parse(fila.Cells[5].Value.ToString()), //cantidad
                        decimal.Parse(fila.Cells[6].Value.ToString()), //precio unitario
                        int.Parse(lblCodigoRequerimiento.Text), //requerimiento
                        activado, //verificado
                        int.Parse(config.LeerCodigoUsuario().ToString())); //usuario
                }

                MessageBox.Show("SE HA REGISTRADO EL NUEVO REQUERIMIENTO", "SISTEMA DE CAJA CHICA",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.LimpiarControles();
                this.SelectMaxNumero();
            }
            catch (Exception ex)
            {
                MessageBox.Show("SE HA PRODUCIDO UN ERROR AL REGISTRAR EL REQUERIMIENTO,\nPOR FAVOR INTENTE DE NUEVO",
                    "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            
        }

        private void LimpiarControles()
        {
            txtCantidad.Text = "0";
            txtDescripcion.Text = "";
            txtFechaAprobacion.Text = "";
            txtFechaSolicitud.Text = "";
            txtMotivo.Text = "";
            txtPrecioUnitario.Text = "0";
            txtResponsableAprobacion.Text = "";
            txtResponsableRequerimiento.Text = "";
            txtTotalRequerimiento.Text = "";
            cboCentroCosto.SelectedIndex = 0;
            cboMoneda.SelectedIndex = 0;
            cboResponsableAprobacion.SelectedIndex = 0;
            cboResponsableRequerimiento.SelectedIndex = 0;
            cboUnidadMedida.SelectedIndex = 0;
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (txtDescripcion.Text.Equals("") || txtCantidad.Text.Equals("") || txtPrecioUnitario.Text.Equals(""))
            {
                MessageBox.Show("POR FAVOR LLENE LOS DATOS NECESARIOS\nPARA AGREGAR AL DETALLE",
                    "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtDescripcion.Select();
            }
            else
            {
                grdDetalle.Rows.Add(
                    cboCentroCosto.SelectedValue.ToString(),
                    cboCentroCosto.Text,
                    txtDescripcion.Text,
                    cboUnidadMedida.SelectedValue.ToString(),
                    cboUnidadMedida.Text,
                    txtCantidad.Text,
                    txtPrecioUnitario.Text,
                    decimal.Parse(txtPrecioUnitario.Text) * decimal.Parse(txtCantidad.Text));
                
                decimal sumatoria = 0;

                foreach (DataGridViewRow row in grdDetalle.Rows)
                {
                    sumatoria += Convert.ToDecimal(row.Cells[7].Value);    //aqui recorre las celdas y las va sumando
                }
                txtTotalRequerimiento.Text = Convert.ToString(sumatoria);
                cboCentroCosto.Focus();
            }
            
        }

        private void txtEliminar_Click(object sender, EventArgs e)
        {
            int Todo = grdDetalle.RowCount; //cuenta todas las filas del dgDatos
            if (Todo >= 2) //las filas del dgDatos tienen que ser mayor o igual a 2 para poder remover
            {
                int Fil = grdDetalle.CurrentRow.Index;
                grdDetalle.Rows.RemoveAt(Fil);
            }
            else //en caso contrario no remueve la fila
            {
                MessageBox.Show("NO EXISTE NINGUN REGISTRO PARA ELIMINAR!",
                "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK,
                MessageBoxIcon.Warning);
            }

            decimal sumatoria = 0;

            foreach (DataGridViewRow row in grdDetalle.Rows)
            {
                sumatoria += Convert.ToDecimal(row.Cells[7].Value);    //aqui recorre las celdas y las va sumando
            }
            txtTotalRequerimiento.Text = sumatoria.ToString(); //aqui se graba el total
        }

        private void btnNuevoCancelar_Click(object sender, EventArgs e)
        {
            this.LimpiarControles();
            txtFechaSolicitud.Text = "";
            sbMantenimiento.ExpandedPanel = sbpVer;
            stcMaestro.SelectedTab = stiListado;

        }

        private void btnNuevoLimpiar_Click(object sender, EventArgs e)
        {
            this.LimpiarControles();
        }
    }
}
